Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Maik Schmidt - Arduino A Quick-Start Guide, 2nd Edition (The Pragmatic Programmers) - 2015.pdf
Скачиваний:
185
Добавлен:
22.03.2016
Размер:
30 Мб
Скачать
☆

What If It Doesn’t Work? • 143

-end

-print '0' * (8 - (image.columns % 8))

-puts ','

-end

20

- puts '};'

First, the program loads the rmagick library and imports the RMagick namespace. We do this to save some typing, because now we don’t have to fully qualify all classes that live in the RMagick namespace. In line 4, we read an image whose name we have to pass as a command-line argument. The image file’s format doesn’t matter, because ImageMagick understands nearly all image file formats. The image variable contains a representation of the image that doesn’t depend on the original file format any longer.

Next, we output the first three lines of the C++ file we’d like to generate. These lines are mostly static. Only the third line contains some variable parts—that is, the image’s width and the height.

Then we process the image’s pixels using two nested loops. The outer loop iterates through each row of the image, and the inner loop through each column. In line 13 we read the current pixel, and in the next line we use a cheap trick to determine whether the pixel is black or white. We know that our images consist only of black and white pixels, so it’s sufficient to check only one color component. If the red component is 0, the pixel has to be black. If it’s 1, the pixel has to be white. We transform every pixel into a bit value, and if the number of pixels in an image row isn’t divisible by 8 without a remainder, we fill the remaining bits with zeros.

You can run the program like this:

maik> ruby img2cpp.rb thermometer.png > thermometer.cpp

This call turns the thermometer.png file into a C++ file you can add to your Arduino project without any further modifications. That’s how software developers approach boring and error-prone tasks.

In the next chapter, you’ll learn how to connect a Wii Nunchuk to your Arduino, and we’ll use the TVout library to turn the Arduino into a video game console.

What If It Doesn’t Work?

Even if this chapter’s hardware is simple, a few things can still go wrong. If you don’t see a video signal at all on your TV set, make sure you’ve selected

report erratum • discuss

Chapter 8. Generating Video Signals with an Arduino • 144

the right input source. Usually its name is AV or Composite. When in doubt, try all of them.

Then check whether you’ve swapped the resistors. Connect the 470Ω resistor to pin D7 and the 1kΩ resistor to D9. Also, make sure the resistors have the right values.

If you see a distorted video signal, make sure you haven’t accidentally used NTSC instead of PAL or vice versa. Also, check all solder joints on the modified RCA cable. When in doubt, add more solder.

Exercises

•Use the TVout library to visualize some other sensor’s data. You can try to build the parking-distance control from Chapter 5, Sensing the World Around Us, on page 77, using the TVout library.

•Modify the TV thermometer so that it switches between degrees Celsius and degrees Fahrenheit every few seconds. Don’t just change the text; change the graphics, too.

report erratum • discuss

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]